module countries_currencies_languages.test;

import std.stdio;

import countries_currencies_languages.structures;
import countries_currencies_languages.languages;
import countries_currencies_languages.currencies;
import countries_currencies_languages.countries;
import countries_currencies_languages.iso639;

unittest {
	import std.array : array, empty;
	import std.algorithm.sorting : sort;
	import std.algorithm.iteration : filter, map, joiner, uniq;
	import std.algorithm.searching : canFind;

	auto cur = getCurrencies();
	auto lang = getLanguages();
	auto sortedLangs = lang.keys().sort;
	auto cou = getCountries();

	auto sortedLangsInCou = allCountries[]
		.map!(it => it.additional.languages[])
		.joiner
		.filter!(it => !it.empty)
		.array
		.dup // Workaround for element type being immutable.
		.sort
		.uniq
		.array;

	size_t idx;
	writeln(sortedLangs);
	writeln("\n\n");
	writeln(sortedLangsInCou);

	writeln("\n\n");
	writeln(sortedLangsInCou.filter!(it => !canFind(sortedLangs, it)));

	writeln("\n\n");
	writeln(sortedLangs.filter!(it => !canFind(sortedLangsInCou, it)));

	auto sortedIso = getISO639().values().map!(it => it.alpha2)
		.filter!(it => !it.empty)
		.array.sort.array;
	writeln("\n\n");
	writeln(sortedIso);
	writeln("\n\n");
	writeln(sortedLangsInCou.filter!(it => !canFind(sortedIso, it)));
}